package com.csnf.dao;

import com.csnf.entity.User;
import com.csnf.util.JdbcUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDao {
    public List<User> getAll() throws SQLException {
        Connection conn=DriverManager.getConnection("jdbc:mysql:///tmalldemodb?serverTimezone=UTC", "root", "root123");
        PreparedStatement ps=conn.prepareStatement("select * from user");
        ResultSet rs=ps.executeQuery();
        List<User> userList=new ArrayList<>();
        while(rs.next()) {
            User user=new User();
            user.setUser_id(rs.getInt("user_id"));
            user.setUser_name(rs.getString("user_name"));
            user.setUser_nickname(rs.getString("user_nickname"));
            userList.add(user);
        }
        return userList;
    }

    public List<User> getUserNickName(String nickName) throws Exception {
        Connection conn=JdbcUtil.getConnection();
        String sql=("select user_id,user_name,user_nickname from user where user_nickname like concat('%',?,'%')");
        PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql,nickName);
        ResultSet rs = ps.executeQuery();
        List<User> userList=new ArrayList<>();
        while(rs.next()) {
            User user=null;
            try {
                user=JdbcUtil.invokeObject(rs,User.class);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
            userList.add(user);
        }
        JdbcUtil.close(rs,ps,conn);
        return userList;
    }
    public User getUserById(Integer user_id) throws Exception {
        Connection conn=JdbcUtil.getConnection();
        String sql=("select user_id,user_name,user_nickname from user where user_id=?");
        PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql,user_id);
        ResultSet rs = ps.executeQuery();
        User user=null;
            if(rs.next()) {
                user=JdbcUtil.invokeObject(rs, User.class);
            }
            JdbcUtil.close(rs,ps,conn);
            return user;
    }

    public boolean updateUser(User user) throws SQLException {
        Connection conn=JdbcUtil.getConnection();
        String sql=("update user set user_name=?,user_nickname=? where user_id=?");
        PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql,user.getUser_name(),user.getUser_nickname(),user.getUser_id());
        int rows=ps.executeUpdate();
        JdbcUtil.close(ps,conn);
        return rows>0;
    }
    public boolean deleteUser(Integer user_id) throws SQLException {
        Connection conn=JdbcUtil.getConnection();
        String sql=("delete from user where user_id=?");
        PreparedStatement ps=JdbcUtil.getPreparedStatement(conn,sql,user_id);
        int rows=ps.executeUpdate();
        JdbcUtil.close(ps,conn);
        return rows>0;
    }
}
